package cn.com.ctcloud.saas.core.basic.dao.impl;

import com.chinact.platform.util.database.HQLUtil;

import cn.com.ctcloud.saas.core.basic.dao.ICTSaaSBaseJDBCDao;

/**
 * Title: ChinaCT SaaS
 * <p>
 * Description: 核心业务模块JDBC Dao
 * <p>
 * Copyright: 2008
 * <p>
 * Company: Liaoning Open Data Communication Co.,Ltd.
 *
 * @author lihui
 * @version 1.0.0
 */
public class CTSaaSBaseJDBCDaoImpl implements ICTSaaSBaseJDBCDao {
	/**
	 * 获取分页QL语句
	 *
	 * @param offset
	 *            当前页数：从0开始
	 * @param limit
	 *            分页长度
	 * @param sql
	 *            SQL语句
	 * @return 分页的 SQL语句
	 */
	protected String getPageSQL(final int offset, final int limit, final String sql) {
		return getPageSQL(offset, limit, -1, sql);
	}

	/**
	 * 获取分页QL语句
	 *
	 * @param offset
	 *            当前页数：从0开始
	 * @param limit
	 *            分页长度
	 * @param count
	 *            总记录数，是给SQLServer专门用的
	 * @param sql
	 *            SQL语句
	 * @return 分页的 SQL语句
	 */
	protected String getPageSQL(final int offset, int limit, final int count, String sql) {
		// offset从0开始的
		final int start = offset * limit;
		final int end = (offset + 1) * limit;
		// offset从1开始的
		//		int start = (offset - 1) * limit;
		//		int end = offset * limit;
		if ((start < 0) || (start > end)) {
			return null;
		}
		//		final String contsql = "SELECT COUNT(*) FROM (" + sql + ") M";
		//
		//		if (HQLUtil.isShowSql()) {
		//			Log.info(contsql);
		//		}
		//		int limits = 0;
		//		try {
		//			limits = getJdbcTemplate().queryForObject(contsql, Integer.class);
		//		} catch (Exception e) {
		//		}
		//		if (end > limits) {
		//			end = limits;
		//		}
		sql = HQLUtil.getRowCode(sql);
		sql = sql.replaceAll(":start", String.valueOf(start));

		// 对于SQLServer数据库来说，最后一页的:end-start应该是end-count，也就是if(count<end):end-start=end-count
		if (count > 0 && HQLUtil.DB_SQLSERVER.equalsIgnoreCase(HQLUtil.getDbType())) {
			if (count < end) {
				limit = count - start;
			}
		}
		sql = sql.replaceAll(":end-start", String.valueOf(limit));
		sql = sql.replaceAll(":end", String.valueOf(end));

		return sql;
	}
}
